#include <stdio.h>
#include "mytcp.h"
#include "myesp8266.h"
#include "usart.h"


//连接wifi、设置用户名等
int my_tcp_init(void){
	// 轮询at指令以保证通信模块正常启动
	while(!esp8266_sendAT(5000, "AT\r\n")){
		printf("ESP:: AT指令无回复【失败】!!!\r\n");
		return -1;
	}
	printf("ESP:: AT指令回复 成功\r\n");
	
	// 设置station模式
	if(!esp8266_sendAT(5000, "AT+CWMODE=1\r\n")){
		printf("ESP:: station模式配置【失败】!!!\r\n");
		return -1;
	}
	printf("ESP:: station模式配置 成功\r\n");
	
	// 连接wifi
	if(!esp8266_sendAT(10000, "AT+CWJAP=\"%s\",\"%s\"\r\n",WIFI_SSID,WIFI_PASSWORD)){
		printf("ESP:: wifi连接【失败】!!!\r\n");
		return -1;
	}
	printf("ESP:: wifi连接 成功\r\n");
	
	// 设置透传模式
	if(!esp8266_sendAT(5000, "AT+CIPMODE=1\r\n")){
		printf("ESP:: 透传模式设置【失败】!!!\r\n");
		return -1;
	}
	printf("ESP:: 透传模式设置 成功\r\n");
	
	// 连接tcp服务器
	if(!esp8266_sendAT(5000, "AT+CIPSTART=\"TCP\",\"%s\",%d\r\n", SERVER_IP, SERVER_PORT)){
		printf("ESP:: TCP服务器连接【失败】!!!\r\n");
		return -1;
	}
	printf("ESP:: TCP服务器连接 成功\r\n");
		
	// 开启发送模式
	if(!esp8266_sendAT(5000, "AT+CIPSEND\r\n")){
		printf("ESP:: 发送模式开启【失败】!!!\r\n");
		return -1;
	}
	printf("ESP:: 发送模式开启 成功\r\n");
	
	//
	printf("ESP模式初始化完成!!!!!!\r\n");
	
	return 0;
}

void my_tcp_send(char* data, unsigned int byteLen){
	HAL_StatusTypeDef ret = HAL_UART_Transmit(&huart5, (uint8_t*)data, byteLen, 10*1000);
	if(ret == HAL_OK){
		printf("tcp数据发送成功\r\n");
	}else if(ret == HAL_TIMEOUT){
		printf("tcp数据发送失败[超时]\r\n");
	}else{
		printf("tcp数据发送失败[%d]\r\n", ret);
	}
}


////主题发布
//int my_mqtt_pub(int timeout, char* topic, char* msg){
//	if(!esp8266_sendAT(timeout, "AT+MQTTPUB=0,\"%s\",\"%s\",0,0\r\n",topic,msg)){
//		printf("ESP:: 主题[%s]发布【失败】!!!\r\n", topic);
//		return -1;
//	}
//	printf("ESP:: 主题[%s]发布 成功\r\n", topic);
//	return 0;
//}
////主题订阅
//int my_mqtt_sub(int timeout, char* topic){
//	if(!esp8266_sendAT(timeout, "AT+MQTTSUB=0,\"%s\",1\r\n",topic)){
//		printf("ESP:: 主题[%s]订阅【失败】!!!\r\n", topic);
//		return -1;
//	}
//	printf("ESP:: 主题[%s]订阅 成功\r\n", topic);
//	return 0;
//}


////断开连接
//int my_mqtt_disconn(int timeout){
//	if(!esp8266_sendAT(timeout, "AT+MQTTCLEAN=0\r\n")){
//		printf("ESP:: MQTT连接断开【失败】!!!\r\n");
//		return -1;
//	}
//	printf("ESP:: MQTT连接断开 成功\r\n");
//	return 0;
//}